Complete is a tough word to define for a project. Often, when a developer says something is "complete" or "done" s/he is saying "I've coded it." In fact, this is nowhere near complete.

Here are a minimal set of characteristics to define something as complete:
  • Code Written
  • Unit Tests Written
    • Unit tests running reliably
    • Unit tests running independently with no side effects
    • Unit test running quickly
  • Code integrated with rest of source base
    • All unit tests passing after integrating
  • Code checked in to repository
  • User acceptance tests validated as running (manually OK, automated better)

Before even getting started, it should be clear to the team what "done" or "complete" mean.